package cn.stimd.spring.aop.framework;

import cn.stimd.spring.aop.Advisor;
import cn.stimd.spring.aop.TargetSource;
import org.aopalliance.aop.Advice;

/**
 * 该类由持有一系列配置的Aop对象的工厂类实现
 * 所有从Spring获得的代理都可以转换为该接口，以操作其Advice
 * <p>
 * Created by Stimd
 * 项目地址：https://gitee.com/stimd/spring-wheel
 * 公众号：Java编程探微
 */
public interface Advised {
    /**
     * 是否代理目标类，如果为true使用cglib，否则使用jdk动态代理
     */
    boolean isProxyTargetClass();

    void setTargetSource(TargetSource targetSource);
    TargetSource getTargetSource();
    Class<?> getTargetClass();
    Class<?>[] getProxiedInterfaces();

    Advisor[] getAdvisors();
    void addAdvisor(Advisor advisor);

    void addAdvice(Advice advice);
}
